package main

import (
	"buding-ai/internal"
	"buding-ai/pkg/config"
	"context"
	"fmt"
	"log"
	"os"
	"os/signal"
	"syscall"
	"time"
)

func main() {
	// 获取配置
	cfg := config.GetConfig()

	// 创建应用程序实例
	app := internal.NewApplication()

	// 构建服务地址
	addr := fmt.Sprintf(":%d", cfg.Server.Port)

	// 在独立的goroutine中启动服务
	go func() {
		log.Printf("服务正在启动，监听地址: %s\n", addr)
		if err := app.Start(addr); err != nil {
			log.Printf("服务启动失败: %v\n", err)
			os.Exit(1)
		}
	}()

	log.Println("服务已成功启动")

	// 创建信号通道
	quit := make(chan os.Signal, 1)

	// 监听中断信号
	signal.Notify(quit, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)

	// 等待信号
	<-quit
	log.Println("正在关闭服务...")

	// 创建关闭超时上下文
	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
	defer cancel()

	// 停止应用
	app.Stop(ctx)

	log.Println("服务已安全退出")
}
